
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    // 设置一个环境变量
    setenv("PARENT_ENV", "父进程设置的环境变量", 1);
    
    printf("父进程PID: %d\n", getpid());
    printf("父进程环境变量: %s\n", getenv("PARENT_ENV"));
    printf("--------------------\n");
    
    // 创建子进程
    pid_t pid = fork();
    
    if (pid == 0)
    {
        // 子进程代码
        printf("子进程PID: %d\n", getpid());
        
        // 尝试访问父进程设置的环境变量
        char *env_value = getenv("PARENT_ENV");
        if (env_value != NULL)
        {
            printf("子进程继承的环境变量: %s\n", env_value);
        }
        else
        {
            printf("子进程没有继承到环境变量\n");
        }
        
        // 修改环境变量（只在子进程中有效）
        setenv("PARENT_ENV", "子进程修改了环境变量", 1);
        printf("子进程修改后的环境变量: %s\n", getenv("PARENT_ENV"));
        
    }
    else 
    {
        // 父进程代码
        // 等待子进程结束
        wait(NULL);
        
        printf("--------------------\n");
        printf("父进程环境变量(子进程修改后): %s\n", getenv("PARENT_ENV"));
    }
    
    return 0;
}

//#include <stdio.h>
//
//extern char **environ; // 声明外部的全局变量
//
//int main()
//{
//    int i = 0;
//    for (i = 0; environ[i] != NULL; i++)
//    {
//        printf("%s\n", environ[i]);
//    }
//    return 0;
//}

//#include <stdio.h>
//#include <stdlib.h> // getenv头文件
//
//int main() 
//{
//    char *path_value = getenv("PATH"); // 查询名为"PATH"的环境变量
//    if (path_value != NULL)
//    {
//        printf("PATH: %s\n", path_value);
//    }
//    return 0;
//}

//#include<stdio.h>
//#include<string.h>
//
//int main(int argc, char *argv[], char *envp[])
//{
//    int i=0;
//    for ( i = 0; envp[i] != NULL; i++)
//    {
//        printf("%s\n", envp[i]); // 打印所有环境变量，格式：KEY=VALUE
//    }
//    return 0;
//}

//int main(int argc, char *argv[])
//{
//    if(argc<2)
//    {
//        printf("请按【%s -v1/-v2/-v3】进行输入\n",argv[0]);
//        return 1;
//    }
//    if(strcmp(argv[1],"-v1")==0)
//    {
//        printf("功能1\n");
//    }
//    else if(strcmp(argv[1],"-v2")==0)
//    {
//        printf("功能2\n");
//    }
//    else if(strcmp(argv[1],"-v3")==0)
//    {
//        printf("功能3\n");
//    }
//    else 
//    {
//        printf("功能不存在\n");
//    }
//    return 0;
//}

//
//int main(int argc , char *argv[])
//{
//    int i=0;
//    for(i=0;i<argc;i++)
//    {
//        printf("argv[%d] : %s\n",i,argv[i]);
//    }
//    return 0;
//}
